package com.jtny.nytb.config.varible.vo;

import cn.hutool.core.util.ObjectUtil;
import com.jtny.component.entity.LocalHolder;
import com.jtny.component.util.BeanUtils;
import com.jtny.component.util.CurrentUserUtils;
import com.jtny.nytb.config.varible.dto.ConfigGlobalManagementDTO;
import com.jtny.nytb.valid.annotation.ValueValid;
import com.jtny.nytb.valid.param.Update;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Optional;

/**
 * 全局变量管理表单提交From对象
 *
 * @author 智慧能源中心 - 伍天宇
 * @package com.jtny.nytb.config.generic.variable.vo
 * @fileName ConfigGlobalManagementForm.java
 * @createTime 2023年09月05日 15:16
 * @Copyright© 2023 jtny
 * 江投能源技术研究院 版权所有
 */
@Data
@ApiModel("全局变量管理表单提交")
public class ConfigGlobalManagementFormVO implements Serializable {
    private static final long serialVersionUID = -73676261164301576L;

    @ApiModelProperty("id")
    @NotNull(groups = Update.class, message = "主键id 必传")
    private Long id;

//    /**
//     * 变量标识
//     */
//    @ApiModelProperty(value = "全局变量标识", required = true)
//    @NotBlank(message = "全局变量标识不能为空")
//    private String sign;

    /**
     * 变量名称
     */
    @ApiModelProperty(value = "全局变量名称", required = true)
    @NotBlank(message = "全局变量名称不能为空")
    private String name;

    /**
     * 变量分类：1-平台变量，2-企业变量
     */
    @ApiModelProperty(value = "变量分类：1-平台变量，2-企业变量",required = true)
    @ValueValid(intValues = {1, 2}, message = "变量分类非法", ignoreEmpty = false)
    private Integer classify;

    /**
     * 数据类型：1-普通类型，2-数字类型，3-开关，4-数据字典
     */
    @ApiModelProperty(value = "数据类型：1-普通类型，2-数字类型，3-开关，4-数据字典",required = true)
    @ValueValid(intValues = {1, 2, 3, 4}, message = "数据类型非法", ignoreEmpty = false)
    private Integer dataType;

    /**
     * 变量值
     */
    @ApiModelProperty(value = "变量值",required = true)
    @NotBlank(message = "变量值非法")
    private String value;

    /**
     * 生效开始时间
     */
    @ApiModelProperty("生效开始时间")
    private Long effectiveStartTime;

    /**
     * 生效截至时间
     */
    @ApiModelProperty("生效截至时间")
    private Long effectiveEndTime;

    public ConfigGlobalManagementDTO buildDto(String code) {
        ConfigGlobalManagementDTO result = BeanUtils.copyToObject(this, ConfigGlobalManagementDTO.class);
        Optional.ofNullable(code).ifPresent(result::setCode);
        if (ObjectUtil.isNotEmpty(id)) {
            CurrentUserUtils.setUpdateDefaultField(result, LocalHolder.getCurrentUser());
        } else {
            CurrentUserUtils.setCreateDefaultField(result, LocalHolder.getCurrentUser());
        }
        return result;
    }

}
